paradiseislandhdfandomcom-20200214-history
User talk:ParadiseAdi
Welcome Hi, welcome to Paradise island hd Wiki! Thanks for your edit to the User:ParadiseAdi page. Please leave a message on my talk page if I can help with anything! -- CMONYALL (Talk) 21:25, July 23, 2011 Repair function Hey Adi, This function you found for the repairs might bring an early end to our research for the repair rate! Is this function the only one in the entire game code that controls the repairs? Btw, is randomInt(randomInt(7,14),23) not the same as randomInt(7,23)? And if so, would that not mean an average probability of 1 in 15? I am starting to fear that my knowledge of math has sunken away too deep already, and it is just the second week of the holidays.... :') CMONYALL 12:35, July 24, 2011 (UTC) :Hey CMONYALL, I am pretty sure that this is the only function. There are many indications for it. I examined version 1.0.21, but I guess they didn't change it. :Those two functions aren't the same at all: Consider a scenario where the first function generated 7. The next function will generate a number from 7 to 22. In the second scenario, the first generated 10, therefore, the next function only generates numbers from 10 to 22. As you see, 10 can be generated in both scenarios, whereas 7 only in the first. :ParadiseAdi 17:17, July 24, 2011 (UTC) :Yes I know 7 cannot be generated anymore when the nested randomInt returns 10, but the randomInt(randomInt()) function as a whole will return anything between 7 and 23, same as a randomInt(7,23) function will do. I am a information science student so I did some programming myself, but I just cannot see what the reason is to include a randomInt inside a randomInt. I was hoping you could explain that to me? Is it maybe increasing the probability for a number between 7 and 14 to be returned? CMONYALL 18:04, July 24, 2011 (UTC) :You're partially correct. randomInt(randomInt()) and randomInt() both have the same image (integers from 7 to 22) and the outputs have different distributions (randomInt has a uniform, the nested one a weighted distribution). That's why randomInt(randomInt()) can't be replaced by the simpler randomInt(). But 7 is the least probable number and 13–22 uniformly the most probable ones. ParadiseAdi 21:41, July 24, 2011 (UTC) :Ok, thnx :) CMONYALL 22:50, July 24, 2011 (UTC) random int double nesting cmonyall - do you get the randomint (randomint(7,14), 23) bit now? The output will be: 7 - 1/91th the time (one time out of 91) 8 - 2/91th the time 9 - 3/91th the time 10 - 4/91th the time 11 - 5/91th the time 12 - 6/91th the time 13 - 7/91th the time 14 - 7/91th the time 15 - 7/91th the time 16 - 7/91th the time 17 - 7/91th the time 18 - 7/91th the time 19 - 7/91th the time 20 - 7/91th the time 21 - 7/91th the time and 22 - 7/91th the time. So it generates a random number from 7 to 22, but it is weighted to the 13-22 range. Another way to think of it is: IF the code was randomint(7,23) - then collect income from your buildings 7 times. On the 8th collection their would be a 1 in 16 chance that it needs repair at that time. But as the code is randomint(randomint(7,14),23) - there is actually only a 1 in 91 chance that it needs repairing right then. So there is a 90/91 chance you will get to make it to the 9th collection. On the 9th collection, there is then a 3 in 91 chance it needs repairing instead of 2 in 16. 88 times out of 91 it will make it to the 10th collection, when it will need repairing 6 times out of 91 (instead of 3 in 16). So on. If the code was just simply randomint(7,23) then the mode and median would be 11 colelctions instead of 14, and the mean would be 11.704. Using the double nesting of randomin(randomint(7,14),23) gives a good standard deviation of needing repairs after 11-16 collections 78% of the time. ie. less than 22% of the time it will need repairing quicker or longer than those most-common values. Cool? Thnx for explaining DMR ;) I already thought it would be something like that, but now I am sure. It has been a while since I last did some coding (a) My calculation of the mean from the algorithm I get: Median = 14 Mode = 14 And the all-important number, I get: Mean = 13.580401 (which when rounded to 3 decimal places is exactly the same as your value rounded to 3 decimal places: 13.580 or 7.36% Since the original estimation of 7.14-7.15%, Ezcry, ParadijEijland, and others have been calculating higher values around with Ezcry quoting 7.236%, so it is no surprise the mathematical value is higher than the old estimated value. Interestingly your simulation gives 7.236% also, exactly the same as Ezcry's long-term calculation. So why do those values differ from the theoretical value? I've not looked at your simulation code, and I have no confirmation that the formulae is correct or that randomInt(a,b) returns an integer x: a <= x < b Out of curiosity, I ran the numbers for: randomInt(a,b) returns an integer x: a <= x <= b instead, and I got 13.7705 or 7.262% - which is much closer to the current real-life estimations... "Consider two event types: repair (the repair symbol appears) and collect (the green(!) buck appears). 1 of 14 events is the repair event and the other 13 events are collect events. Therefore the formula needs the factor 13 instead of 14." this is sort of where you are wrong. It's because the repair is not an event, it does not replace the collect, and, more importantly, it does not call the isBroken() function, thus is not calculated in the counter. :That one made me think, but… By event I mean: something happens on your bank account (i.e. clicking on the buck/repair sign). So, according to my tabular example on the profile page, collect income 3 times → get money / repair the building once → pay money. The value on the account changes 4 times. Therefore, it somehow "replaces" collect: pay money instead of getting some. If you want to know the average income, you can calculate it using my formula. :Can you show me an example (like I did with the table) with your reasoning? I would be willing to learn, but I haven't seen the correct reasoning in my opinion… :-) :You are right with the counter. Response to comments on the Profitability page First, I am still alive and verified the algorithm for v1.1.3 ;-) I will be back around September 10th, because of holidays, exams and my side job. I am still unsure why the mathematical repair probability derives from the simulated value. You find full details on the spreadsheet linked on my profile page. Please help! :-) Ezcry4t3d: Did you run across anything else interesting in the game code? Yes, indeed: the game is very talky! It notifies the developers of each start of the game and sends error reports to them if the application crashes as well. Additionally, it at least tracks constructions of new buildings with Google Stats. In my opinion, this is a serious privacy issue! To prevent this behaviour, block the following domains: flurry.com, google-analytics.com. There are a lot of people complaining about not getting the new building offers, can you shed some light on how the offers work in the code? Unfortunately, I have no information on this issue. But I can publish an "unlimited" version if there is interest. DarkMoonRising: Any chance you could dump the whole program somewhere? Sorry, I won't do that because of copyrights and all that legal stuff. I primarily used dexdump and a little baksmali. The bytecode documentation was extremely useful as well. I strongly hinted that I was of the very firm belief that ALL three of Adi's calculations of 6.339% and 7.236% and 7.692% are all incorrect. I had some erroneous numbers on the first version of my page, but I fully back the current values of 7.36377063% and and 7.236448%. I also provide details on the derivation of the values. So there is obviously some interpretation on your behalf to extract the code, and we are all at your mercy to assume that you got it right. ... how do you know that randomInt(a,b) returns an integer x: a <= x < b ? Yes and no. Since the code is available only in compiled and obfuscated form, it is necessary to guess some things like function names. I went through the code of v1.1.3 thoroughly and I can see no errors in my reproduction of the code. Also, I am very sure, that I correctly described randomInt() (which is another function of the game). If you do not believe me, your only option is to reverse-engineer the code yourself or consult somebody else who is capable of doing so. ;-) If you have any doubts, please state what they are based on. it took me a while to work out your error, but you have misunderstood the concept of ratios. I admit that I was unaware of the fact that both are used in this Wiki on different places at first. An example just to make sure, we understand each other: Ratio of occurences of EventA:EventB 1:14 (Event A occurs once, event B 14 times) ⇒ P(EventA) = 1/15, P(EventB) = 14/15 Another example: A:B 4:7 ⇒ P(A) = 4/(4+7), P(B) = 7/(4+7) Do you agree? ParadijsEiland I think I found the error in the formula of Adi Again, this is because of the ratio/probability problem. Take the following script and put it into Eigenmath: ap = 1/x PParadiseAdi = ((1-ap)*I - ap*R) / ((1-ap)*TI + ap*TR) pp = 1/(x-1) PParadijsEiland = (I - pp*R) / (TI + pp*TR) PParadiseAdi - PParadijsEiland simplify After some seconds of processing, the output is 0. Conclusion: If you put pp=1/14 (which is the ratio) in ParadijsEiland's formula, you calculated the income with breakage probability: ap = 1/15 (I explained that with the tabular example on my profile page) --- No, that is not what I said!!!!!!!!!!!! My p is the same as your p. Again: the change on collecting income when you hit the $-sign is always 100%. Besides that, there is a chance that the same collection also gives you a repair. Your formula gives a chance of about 92.8% on income and 7.2% on repair. It must be: 100% chance on income and 7.2% on repair. ParadijsEiland 12:46, August 7, 2011 (UTC) :I know that our p's are not the same. I changed it accordingly to prevent misunderstanding. You're right, you always get 100% of the income, IF the dollar sign appears, but that's the thing: it doesn't always appear. :I tried hard to explain every aspect, but I guess we don't come to an agreement here. I firmly believe that I'm right and so do you. We would perhaps come to an agreement if we ment in person and with the help of pen and paper… ;-) :We should probably let it rest and move on. ;-) :--ParadiseAdi 17:37, August 7, 2011 (UTC) : Why do you keep talking about 1/14, 1/15 or whatever. That discussion stopped weeks ago. We are talking about the formula you are using. And why do you say that our p's are not the same, they are the same! You found a value for p = 0.07236. We can all live with that. We both use the SAME value of p (0.07236) in our formula. But in your formula you say: When I hit the $-sign, I get a Income or I get a repair. But that is not the case. When you hit the $-sign you get Income or you get a(Income + Repair). So you say ( 0.92764 * I - 0.07236 * R ) / ( 0.92764 * TI + 0.07236 * TR ) But the chance on a income is not 0.92764. You have always income, so that chance is 1. Therefor it is ( I - 0.07236 * R ) / ( TI + 0.07236 * TR ) ParadijsEiland 19:54, August 7, 2011 (UTC) Misunderstanding ParadijsEiland, now I see the source of our misunderstanding: I get the same values as on the Profitability page with my formula. All computations are correct, but calling the parameter p'' is a little confusing, since it is not the probability, it's the ratio which, in this case, is the reciprocal of the expected value. I defined the probability space as follows: # Sample space Ω = "something happens to the money on the account" = {Collect Income, Repair Building} Note: We do not consider improvements since the user has total control over that event ⇒ not random ⇒ not in probability space. # Set of events (σ-algebra) ℱ = P(Ω) # Probability measure P Consider the following parameters: e = 13.8192 r = 1/e (= 0.07236) p = P(Repair Building) = 1/(e+1) (= 0.06748) Then all of the formulas are equivalent: (e*I - R) / (e*TI + TR) (I - r*R) / (TI + r*TR) ((1-p)*I - p*R) / ((1-p)*TI + p*TR) In this probability space, the parameter you called ''p is in fact called ratio r''. ParadiseAdi 13:11, January 10, 2012 (UTC) Sim versus expected value I haven't looked at the spreadsheet, but there's no mathematical reason for the simulated repair probability to be the same as the one calculated from the expected arrival time. The reason is that you can't pass non-linear functions through the expectations operator, i.e. E(f(x) not equal to f(E(x)) for f that is not affine. Your probability estimate is 1/E(time fo failure), but that's not equal to the failure probability per period - the exception is when survival time is exponentially distributed, i.e. failure probability is constant. The sim should give the right value. Other functions to care about Should one really care too much about the P value of the repair function? There are other events which influence the income: "One of the tourists liked your hospitality very much and thanked you for the fascinating service. You receive as a reward: ..." and ""Repairing the building, the workers found the cache with money in one of its walls. You found: ...". I do receive both quite often. I did never receive so far, so maybe it's not yet implemented: "Pulling down the buildings, the workers came across the plain box. When they opened it, it appeared to be full of treasure. Your wealth increased by: ...". ParadiseGuest 18:59, August 18, 2011 (UTC) : This is an interesting suggestion! I will look into that. Are the events you mentioned above the only ones to appear randomly? :--ParadiseAdi 14:47, January 4, 2012 (UTC) You may want to remove "Are you interested in obtaining the unlocked version?". One should respect the work of the developers, and re-distributing it may be illegal. ParadiseGuest 19:07, August 18, 2011 (UTC) : Point taken. --ParadiseAdi 14:47, January 4, 2012 (UTC) ezcry4t3d Two things, 1) I have no idea how, but I missed most of this math discussion somehow until just now... :( 2) Clearly there's a lot of banning and editing to be done to clean up after the "W.w. onlivecam" disaster of a user above, sorry I don't have time for it right now. :( Ezcry4t3d 12:22, September 1, 2011 (UTC) patata Dude, knock it off. Adi does not check this site anymore so your efforts are in vain. I had a lot going on the past months. Although I wouldn't have much time now either, I'll check back every once in a while. --ParadiseAdi 14:49, January 4, 2012 (UTC) The man has returned! :) CMONYALL 14:53, January 4, 2012 (UTC) Hehe :) I also brought some late Christmas presents, hohoho. :-) ParadiseAdi 15:23, January 4, 2012 (UTC) Thank you for making the links to your trainer app on the Cheating page a little less explicit :) CMONYALL 12:35, January 5, 2012 (UTC) Request Hi, I am interested in obtaining the unlocked version, amorpazlibertad@gmail.com , thanks in advance. ^_^ Hi, How did you make the trainer? Did you hack a saved game or did you reversed engineered on the apk? If you did the last, can you send me the source code, so I can figure out how the Master of construction and One of each copy are implemented... Right now when I try to reverse engineer, extracting the apk crashes on a russian xml file :-( ParadiseLover 11:53, January 5, 2012 (UTC) : Hi ParadiseLover, it's a combination of both. By investigating the code, I found out how to modify the savegame. I had no problems extracting the APK with 7-Zip, it's simply a zip file. However, there is a version downloadable somewhere on the net which is not genuine and failes to extract. Note that you won't be able see the Java source code. ParadiseAdi 19:22, January 6, 2012 (UTC) Trainer Question Can you explain how exactly I can "give the trainer access to the Paradise Island files." Right now all it does is force close at start on both my phone and tablet. I found a root file manager called "Super Manager" that will let me change file permissions, but I can't find the profile0.sav file... and I'm not sure exactly how I'm supposed to be changing the access. The original old trainer app just asked for superuser rights at start, perhaps this is an easier way to go? Ezcry4t3d 04:49, January 24, 2012 (UTC) I finally got the trainer to work. At first I was trying to figure out how to launch the trainer with elevated privileges, but there does not seem to be a way to do this on Android. So then I started looking for a FREE and working root file manager to chmod the saved game file. I tried quite a few file managers before finding Super Manager which is free and actually works after you go into it's options and enable the root option. The next trick was finding the correct /data/data folder, which was fun since there's about 6 or 8 of them on my tablet in various places. The correct one for me was found by hitting the "Back up level folder" option (in Super Manager's File Manager) repeatedly until it doesn't go back anymore, then browsing to /data/data/com.seventeenbullets.android.island/files/ and checking the box next to profile0.sav then hit the chmod button (Gears with red "777" on them) and check the READ and WRITE boxes under "Other" and hit OK. This will allow the trainer to work. I recommend you train and then go back in Super Manager and set the permissions back by unchecking those boxes. I think the game will do that itself anyway and it may flag you for cheating if you leave them and not allow further special events. Ezcry4t3d 19:27, March 15, 2012 (UTC) Trainer Force Close Hey Adi! Trainer works perfect for my game, but when I try to load my wifes profile0.sav it doesn't come up and force closes. Its like there is something different about hers than mine or any others i've tried. Any ideas? I uploaded it here http://www.ndsico.com/profile0.zip I've looked at them both and as what I saw was about the same, its way over my head. I you get a chance or need the file. Thanks! Matt@ndsico.com Matthew Summey 09:09, January 30, 2012 (UTC) Tried the Desktop app '''C:\>java -jar PITrainer.jar profile0.sav' Exception in thread "main" java.lang.ClassNotFoundException: com.seventeen s.offerwall.l at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ......... There is more if you need it. 20:39, January 30, 2012 (UTC)Matt Messed up my game, hoping for some help. Hey Adi, So I did not know this trainer existed. I recently came across the "changing date" cheat and decided to use it only to find out that when I return to the correct date I can no longer collect profit for 401 hrs..... I was wondering if your trainer had a way for manipulating the "till 100% profit is collected" time. Any help or advice would be greatly appreciated. I don't know what to do and kinda don't want to abandon this game for over half a month. bryce.davis@tcu.edu Thanks, Bryce 17:55, January 31, 2012 (UTC) How to give trainer access to Paradise Island files? Can you please tell how to give the trainer access to the Paradise Island files? I can't open this trainer it only crashes. Also I couldn't find the profile0.sav file, I used myphoneexplorer which shows many hidden files but I don't know where to look for this file :-( You can send email to my name at gmail PirateKitty8 10:35, February 15, 2012 (UTC) Just another trainer question It's just another trainer question. You have implemented the option of dumping the save file in JSON format. Would it be very complicated to make a reverse option, i.e. converting the JSON file back into profile0.sav? 07:58, May 31, 2012 (UTC)ucel